
package org.apache.solr.handler;

import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import org.apache.commons.io.IOUtils;
import org.apache.solr.common.util.ContentStream;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;

public class DumpRequestHandler extends RequestHandlerBase {

    @Override
    public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) throws IOException {
        // Show params
        rsp.add("params", req.getParams().toNamedList());

        // Write the streams...
        if(req.getContentStreams() != null) {
            ArrayList<NamedList<Object>> streams = new ArrayList<>();
            // Cycle through each stream
            for(ContentStream content : req.getContentStreams()) {
                NamedList<Object> stream = new SimpleOrderedMap<>();
                stream.add("name", content.getName());
                stream.add("sourceInfo", content.getSourceInfo());
                stream.add("size", content.getSize());
                stream.add("contentType", content.getContentType());
                try (Reader reader = content.getReader()) {
                    stream.add("stream", IOUtils.toString(reader));
                }
                streams.add(stream);
            }
            rsp.add("streams", streams);
        }

        rsp.add("context", req.getContext());
    }

    // SolrInfoMBeans methods
    @Override
    public String getDescription() {
        return "Dump handler (debug)";
    }

    @Override
    public String getSource() {
        return "$URL:$";
    }
}
